#include <buildfile.h>

INPUT(LINKR_IPUT_FILE)
OUTPUT(LINKR_OPUT_FILE)
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
    {
    . = 0x30008000;

    __begin_kernel = .;                               // 运行地址
 
    __begin_os_hal_head_text = .; 
    .head.text ALIGN(4) : { *(.head.text) }           // 存放最开始运行的指令
    __end_os_hal_head_text   = .; 
 
    __begin_os_hal_head_data = .; 
    .head.data ALIGN(4) : { *(.head.data) }           // 存放最开始运行的数据结构
    __end_os_hal_head_data   = .;  
 
    __begin_os_hal_init = .; 
    .os_hal.init ALIGN(4) : { *(.os_hal.init) }       // 包含os硬件相关层的初始化指令
    __end_os_hal_init   = .;    
 
    __begin_os_hal_vector = .; 
    .os_hal.vector ALIGN(4) : { *(.os_hal.vector) }   // 包含ARM平台的中断向量
    __end_os_hal_vector   = .;     

    __begin_os_hal_intvect = .;
    .os_hal.intvect ALIGN(4) : { *(.os_hal.intvect) } // 包含中断处理程序的指令
    __end_os_hal_intvect   = .;  

    __begin_text = .;
    .text ALIGN(4) : { *(.text) }                     // 包含所有目标文件的默认指令段
    __end_text   = .;

    __begin_data = .;
    .data ALIGN(4) : { *(.data) }                     // 包含所有目标文件的默认数据段
    __end_data   = .;    

    __begin_rodata = .;
    .rodata ALIGN(4) : { *(.rodata.*) }                 // 包含所有目标文件的默认只读数据段
    __end_rodata   = .;  

    __begin_strtab = .;
    .strtab ALIGN(4) : { *(.strtab) }                 // 包含所有目标文件的默认字符串表段
    __end_strtab   = .;     

    __begin_bss = .;
    .bss ALIGN(4) : { *(.bss) }                       // 包含所有目标文件的默认未初始化或初始化为0的数据段(不占可执行文件空间)
    __end_bss   = .; 

    __end_kernel = .;
    }
